Мы сейчас посмотрим на примере Borland C++ для DOS. Так понятнее, для нас главное идея. А в следующем шаге посмотрим, как работает то же самое в управляемом коде. Объявим класс и создадим объект.
class CMyClass
{
public:
CMyClass();
int x;
char c;
};
CMyClass::CMyClass()
{
x=5;
c='a';
}
void main()
{
CMyClass s;
}
И соберем проект. Я поставил оптимизацию по скорости. Смотрим размер.

Теперь объявим массив классов.
CMyClass s[100];
и опять смотрим размер.

Изменился но не значительно. Правильно, это не статический класс. Хотя выглядит похоже. BC++ за нашей спиной производит всякие манипуляции. Статический класс этот тот класс память под который находиться внутри модуля EXE. Изменим класс модификатором static.
static CMyClass s[100];
И посмотрим свойства.

Другое дело. Мы даже место можем увидеть если посмотрим EXE в блокноте.

Не верите? Объявите массив int в классе.
class CMyClass
{
public:
CMyClass();
int x[100];
char c;
};
И опять посмотрите.

Вот оно. В MS DOS это место было ограничено и нельзя было создать большой массив. Так вот практически все классы которые Вы создаете в VC++ по факту динамические, потому что в динамической памяти находятся даже если Вы не используете NEW.